
// 1、将 data 的所有子孙属性注入 getter、setter
// 2、
export default class observe {
    constructor(data) {
        this.observeData(data)
    }

    observeData(data) {
        if(data && typeof data === "object"){
            Object.keys(data).forEach(key => {
                this.observeProperty(data, key, data[key])
            })
        }
    }

    observeProperty(data, key, value) {

        // 如果 value 也是一个对象，递归执行绑定该对象的子属性
        this.observeData(value);

        Object.defineProperty(data, key, {
            get() {
                return value
            },

            set(newValue) {
                newValue = value
            }
        })
    }
}